// @ts-ignore
import {isNullOrUndef} from '@/utils/is.ts'
import tool from "@/utils/tool";
import { router } from "@/router/index";
import {ElNotification, ElMessageBox} from 'element-plus';

export function reqResolve(config: any) {
    // 防止缓存，给get请求加上时间戳
    if (config.method === 'get') {
        config.params = {...config.params, t: new Date().getTime()}
    }
    let token = tool.data.getToken();
    // config.headers['ui-type'] = 'web'
    if (token) {
        config.headers['token'] = token
    }

    return config
}

export function reqReject(error: any) {
    return Promise.reject(error)
}

const noLoginCodes = [10003,911012]

export function resResolve(response: any) {
    // 根据code提示错误信息
    const resData = response?.data || {}
    let {code, message} = resData
    if (isNullOrUndef(code)) {
        // 未知错误
        code = -1
        message = '接口异常！'
    }
    if (code !== 0) {
        if (noLoginCodes.includes(code)) {
            // 未登录，清除本地token
            tool.data.clear();
            ElMessageBox.confirm('登录已过期，是否重新登录？', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                closeOnClickModal: false,
                type: 'warning'
            }).then(() => {
                // 点确认后的处理
                router.replace({path: '/login'});
            }).catch(() => {
            });
        }
        // console.error(`【${code}】 ${message}`)
        return Promise.resolve(resData)
    }
    return resData
}

export function resReject(error: any) {
    if (!error.response) {
        ElNotification.error({
            title: '请求错误',
            message: "请求服务器无响应！"
        });
        return Promise.resolve({
            code: -1,
            message: "请求服务器无响应！",
            error
        })
    }
    let {code, message} = error.response?.data || {}
    if (isNullOrUndef(code)) {
        // 未知错误
        code = -1
        message = '接口异常！'
    } else {
        /**
         * TODO 此处可以根据后端返回的错误码自定义框架层面的错误处理
         */
        switch (code) {
            case 401:
                message = message || '登录已过期'
                break
            case 403:
                message = message || '没有权限'
                break
            case 404:
                message = message || '资源或接口不存在'
                break
            default:
                message = message || '未知异常'
                break
        }
    }
    ElNotification.error({
        title: code,
        message: message
    });
    // console.error(`【${code}】 ${error}`)
    return Promise.resolve({code, message, error})
}
